#ifndef PATH_H
#define PATH_H

#include <QColor>
#include <QVector>
#include <QPoint>
#include <QPainter>
#include <QPaintDevice>
#include <QPainterPath>

#include "drawobject.h"

// Ломаная линия
class Path : public DrawObject
{
    Q_OBJECT

public:
    enum PointType
    {
         Point_MoveTo = 0,
         Point_LineTo = 1
    };

    //Точки ломаной
    struct Segment
    {
         PointType type;
         QPoint point;
    };

private:
    // Состояния автомата для загрузки ломаной
    enum LoaderState
    {
        LoaderState_Init = 0,
        LoaderState_Char = 1,
        LoaderState_XCoord = 2,
        LoaderState_YCoord = 3,
        LoaderState_Delimiter = 4,
        LoaderState_Illegal = 5
    };

    // Тип текущей буквы
    enum CharState
    {
        CharState_Char = 0,
        CharState_Minus = 1,
        CharState_Number = 2,
        CharState_Delimiter = 3,
        CharState_Illegal = 4
    };

    CharState getStateByChar(QChar chr);

    static bool isNumber(QString str);

    Segment flushSegment(QString x,QString y,char pointType);

    //Загрузка узлов
    void loadSegments(QString path);

public:
    Path();

    //Массив направлений
    QVector<Segment> segments;

    //Рисование
    void draw(QPaintDevice* device, qreal scale);

    //Метод создания DOM-узла из элемента
    QDomElement saveToNode(QDomDocument &domDoc);

    //Загрузить из узла XML
    void loadFromNode(const QDomElement &node);
};

#endif // PATH_H
